//66. 加一

#include <stdlib.h>

int* plusOne(int* digits, int digitsSize, int* returnSize) {
    //1. 用数组将 +1 后的数字存起来
    int arr[101] = { 0 };

    int num = digits[digitsSize - 1] + 1;
    int carry = num / 10;//如果有进位保存在carry中
    arr[100] = num % 10;//如果是两位数字，把个位保存在数组中
    int j = 99;
    for (int i = digitsSize - 2; i >= 0; i--)
    {
        num = digits[i] + carry;//下一个数字 + carry
        arr[j--] = num % 10;//继续保存在数组中
        carry = num / 10;//更新carry
    }
    arr[j] = carry;//处理最后一次相加carry > 0

    int* ret = NULL;
    if (0 == arr[j])//当原数字最高位不存在进位时
    {
        ret = (int*)malloc(sizeof(int) * digitsSize);
        *returnSize = digitsSize;
        int k = 0;
        for (int i = j + 1; i < 101; i++)//初始化从 j+1 位置开始
        {
            ret[k++] = arr[i];
        }
    }
    else//当原数字最高位存在进位时
    {
        ret = (int*)malloc(sizeof(int) * (digitsSize + 1));
        *returnSize = digitsSize + 1;
        int k = 0;
        for (int i = j; i < 101; i++)//初始化从 j 位置开始
        {
            ret[k++] = arr[i];
        }
    }

    return ret;
}